В последнее время как-то на одну тему попадаются интересные вещи.
Вот, например, что такое великий программистский принцип MapReduce, который позволил компании Гугль заиметь цену акций в 500 долларов за штуку?
Это очень просто, читаем Джоэля. Он кстати гомик, но мы любим его не за это (TM). А вот то, что он часто гиперболизирует и фантазирует не стесняясь, ему стоит поставить в минус.
У него там написано, что это всё пошло от функционального программирования, которые многие крутые программмисты считают куда более мощным и правильным средством, чем наши родные императивные языки вроде Си.
Я вообще Солженицына не читал, но не согласен. Может, функциональные языки и стоит знать, но для повседневного применения и читабельности их могут использовать считанные единицы математичски подкованных разработчиков. Я писал про таких недавно; сам я на это не способен.
А вот что интересно, так это то, что в третью версию С# Microsoft добавит LINQ. Это крайне интересное и мощное средство, которое делает много чего. Можно даже назвать его уникальным; такого ещё не было.
Оно привносит в с# элементы функциональных языков вроде лямбда-выражений. Лябда-выражение применительно к нашим баранам это всего лишь сверхсокращённое определение функции.
Например, выражение s=> s >5 определит функцию
bool Func1(int s)
{
return s >5;
}
Привносит элементы скриптовых языков в виде динамического определения типа по присваемому выражению
Например, после выражения
var a="text";
тип переменной а станет string , а значение - "text"
(Ох, как этим будут злоупотреблять)
Позволяет манипулировать данными в коллекциях и XML, используя SQL-подобный синтаксис (это завязано на возможности , описанные выше)
И даже частично решает проблеу Object-Relational mapping, то есть автоматического соотнесения строк в таблице базы данных и членов класса. Обычно это делает программист, корябая кучу кода вручную.
В LINQ запрос выглядит как sql, записанный прямо в код, и транслируется в настоящий sql, выполняющийся в базе. Как результат создаётся автоматически и возвращается новый класс, в котором поля являются колонками таблицы в базе. А строки - это коллекция таких классов.
Ко всему этому стоит добавить, что LINQ содержит встроенные Map и Reduce. Правда, называются они там по-другому. (Это те самые легендарные MapReduce от Гугля, см. выше.)
Таким образом, Майкрософт не только в очередной раз тырит хорошие идеи, а улучшает их и в чём-то даже революционизирует.
Но на мой сугубо дилетантский взгляд это вызовет следующие проблемы: хотя простое применение LINQ улучшает читабельность и упрощает работу с данными, понимание и углублённое использование LINQ требует немало дополнительных усилий от неподготовленных разработчиков. То есть M$ сделала C# ещё сложнее, мощнее и в чём-то запутаннее.
А цель-то была сделать его простым и читабельным, нет? Если они хотели мощи, надо было сразу пропагандировать и внедрять функциональный язык вроде OCAML или Haskell.
Правда у M$ есть свой такой язык - F#, который является диалектом OCaml'а.
MapReduce, LINQ, фнукциональные языки
2006-12-15
Но это прекрасный, прекрасный, прекрасный инструмент. Я стану пользоваться им, я уверен. MЦ